package lesbonsamis

class ParticipantController {

    def transactionService
    
    static allowedMethods = [ajouter:'POST', sauver:'POST']
	
	def index = {
		redirect(action:'liste')
	}
	
	def liste = {
		Projet projet = Projet.get(session.projetId)
		
		// mise à jour du projet
		transactionService.calculMaj(projet)
		
		def listeParticipant = projet.participants
		render(view:"liste", model:["listeParticipant":listeParticipant])
	}
	
	def creer = {
		Projet projet = Projet.get(session.projetId)
		
		Participant participant = new Participant(params)
        return [participant: participant]
	}
	
	def ajouter = {
		Projet projet = Projet.get(session.projetId)
		
		Participant participant = new Participant(params)
		participant.projet = projet
		
		projet.addToParticipants(participant).save(flush: true)
		
		redirect("action":liste)
	}
	
	def editer = {
		Projet projet = Projet.get(session.projetId)
	    Participant participant = Participant.get(params.id)
					
		render(view:"editer", model:['participant': participant])
	}
	
	def sauver = {
		Projet projet = Projet.get(session.projetId)
	    Participant participant = Participant.get(params.id)
		
		participant.properties = params		
		participant.save(flush: true)
			
		redirect("action":liste)
	}
	
	def supprimer = {
		Projet projet = Projet.get(session.projetId)
	    Participant participant = Participant.get(params.id)
		
		if (participant.estResponsable) {
			def message = "Attention : Il n'est pas possible de supprimer le responsable de l'évènement. Vous pouvez seulement le modifier."
			render(view:"editer", model:['participant':participant,'message':message])
		} else {
			
			// recherche des dépenses associées
			projet.depenses.each { depense ->
				if (depense.payeur == participant) {
					depense.payeur = projet.responsable
				}
				depense.consommateurs.remove(participant)
				if (depense.consommateurs.empty) {
					depense.addToConsommateurs(projet.responsable)
				}
			}
			
			// vidage des transactions
			projet.transactions.each {
				projet.removeFromTransactions(it)
				it.delete(flush: true)
			}
			
			// suppression
			projet.removeFromParticipants(participant)
			participant.delete(flush: true)
			
			redirect("action":liste)
		}
	}
}
